﻿
/* -------------------------------------------------------------------------
//	文件名		：	debugnew.h
//	创建者		：	金山训练营
//	创建时间	：	2007-12-29
//	功能描述	：	辅助检查内存泄漏
//
//	修订记录:
//  1. 创建: 2007.12.29.
//
//  说明: 若使用了MFC则不必使用本文件. MFC有自己的检查内存泄露机制.
//
//	使用步骤:
//	1. include此文件.
//
//	2. 在.cpp中增加以下定义:
//		#ifdef _DEBUG
//		#define new DEBUG_NEW
//		#endif
//
//	3. 在程序退出后, 检查VC的output窗口内是否有dump memory leak
//
//	$Id: $
// -----------------------------------------------------------------------*/

#ifndef __DEBUGNEW_H__
	#define __DEBUGNEW_H__

	#ifdef  __cplusplus

		#ifndef _DEBUG
			// release版下不做任何事情
		#else
			// debug版下重定义new, 以便当出现内存泄漏时自动报警
			#include <crtdbg.h>

		//	#ifndef TCHAR
		//		#if defined(_UNICODE) || defined(UNICODE)
		//			typedef wchar_t TCHAR;
		//		#else
		//			typedef char TCHAR;
		//		#endif
		//	#endif

			inline void * __cdecl operator new(unsigned int size,
											   const char *file, int line)
			{
				int nFlag = _CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
				nFlag |= _CRTDBG_LEAK_CHECK_DF;
				_CrtSetDbgFlag (nFlag);
				return ::operator new(size, _NORMAL_BLOCK, file, line);
			};
			#define DEBUG_NEW new(__FILE__, __LINE__)
			//#define new DEBUG_NEW

			// 若不同时定义delete, 则在编译时会出现warning
			inline void __cdecl operator delete(void* pData,
												 const char* /* lpszFileName */,
												 int /* nLine */)
			{
				::operator delete(pData);
			}

		#endif	// #ifndef _DEBUG
	#endif	// #ifdef  __cplusplus
#endif	// #ifndef __DEBUGNEW_H__
